package loja.model.compra.pedido;

import java.io.Serializable;
import java.math.BigDecimal;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import loja.model.estoque.ItemEstoque;

@Entity
@Table(name = "item_pedido_compra")
public class ItemPedidoCompra implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue
	@Column(name = "id_item_pedido_compra")
	private Long idItemPedidoCompra;
	@Column(precision = 10, scale = 4)
	private BigDecimal preco = BigDecimal.ZERO;
	private Integer quantidade = 0;
	@Enumerated(EnumType.STRING)
	private ItemPedidoCompraStatusType status;
	@ManyToOne(optional = false)
	private ItemEstoque itemEstoque;
	@ManyToOne(cascade = CascadeType.ALL)
	private PedidoCompra pedidoCompra;

	public ItemPedidoCompra() {
	}

	public Long getIdItemPedidoCompra() {
		return idItemPedidoCompra;
	}

	public void setIdItemPedidoCompra(Long idItemPedidoCompra) {
		this.idItemPedidoCompra = idItemPedidoCompra;
	}

	public BigDecimal getPreco() {
		return preco;
	}

	public void setPreco(BigDecimal preco) {
		this.preco = preco;
	}

	public Integer getQuantidade() {
		return quantidade;
	}

	public void setQuantidade(Integer quantidade) {
		this.quantidade = quantidade;
	}

	public ItemPedidoCompraStatusType getStatus() {
		return status;
	}

	public void setStatus(ItemPedidoCompraStatusType status) {
		this.status = status;
	}

	public ItemEstoque getItemEstoque() {
		return itemEstoque;
	}

	public void setItemEstoque(ItemEstoque itemEstoque) {
		this.itemEstoque = itemEstoque;
	}

	public PedidoCompra getPedidoCompra() {
		return pedidoCompra;
	}

	public void setPedidoCompra(PedidoCompra pedidoCompra) {
		this.pedidoCompra = pedidoCompra;
	}

	public BigDecimal getSubtotal() {
		BigDecimal subtotal = BigDecimal.ZERO;
		subtotal = this.preco.multiply(new BigDecimal(this.quantidade));
		return subtotal;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime
				* result
				+ ((idItemPedidoCompra == null) ? 0 : idItemPedidoCompra
						.hashCode());
		result = prime * result
				+ ((itemEstoque == null) ? 0 : itemEstoque.hashCode());
		result = prime * result
				+ ((pedidoCompra == null) ? 0 : pedidoCompra.hashCode());
		result = prime * result + ((preco == null) ? 0 : preco.hashCode());
		result = prime * result
				+ ((quantidade == null) ? 0 : quantidade.hashCode());
		result = prime * result + ((status == null) ? 0 : status.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (!(obj instanceof ItemPedidoCompra))
			return false;
		ItemPedidoCompra other = (ItemPedidoCompra) obj;
		if (idItemPedidoCompra == null) {
			if (other.idItemPedidoCompra != null)
				return false;
		} else if (!idItemPedidoCompra.equals(other.idItemPedidoCompra))
			return false;
		if (itemEstoque == null) {
			if (other.itemEstoque != null)
				return false;
		} else if (!itemEstoque.equals(other.itemEstoque))
			return false;
		if (pedidoCompra == null) {
			if (other.pedidoCompra != null)
				return false;
		} else if (!pedidoCompra.equals(other.pedidoCompra))
			return false;
		if (preco == null) {
			if (other.preco != null)
				return false;
		} else if (!preco.equals(other.preco))
			return false;
		if (quantidade == null) {
			if (other.quantidade != null)
				return false;
		} else if (!quantidade.equals(other.quantidade))
			return false;
		if (status != other.status)
			return false;
		return true;
	}

}
